/*
 * parser.h
 *
 *  Created on: 27-Apr-2009
 *      Author: catchthealien
 */

#ifndef PARSER_H_
#define PARSER_H_

#include <xercesc/dom/DOM.hpp>
#include <xercesc/dom/DOMDocument.hpp>
#include <xercesc/dom/DOMDocumentType.hpp>
#include <xercesc/dom/DOMElement.hpp>
#include <xercesc/dom/DOMImplementation.hpp>
#include <xercesc/dom/DOMImplementationLS.hpp>
#include <xercesc/dom/DOMNodeIterator.hpp>
#include <xercesc/dom/DOMNodeList.hpp>
#include <xercesc/dom/DOMText.hpp>

#include <xercesc/framework/MemBufInputSource.hpp>

#include <xercesc/parsers/XercesDOMParser.hpp>
#include <xercesc/util/XMLUni.hpp>

#include <string>
#include <stdexcept>

// Error codes

enum {
   ERROR_ARGS = 1,
   ERROR_XERCES_INIT,
   ERROR_PARSE,
   ERROR_EMPTY_DOCUMENT
};

namespace cta {

class parser {
private:
	xercesc::XercesDOMParser *FileParser_;
	xercesc::XercesDOMParser *StringParser_;
public:
	parser();
	virtual ~parser();

	   int getInteger(char* configFile, char* p_tag, char* p_attr);
	   int getInteger(std::string& configFile, char* p_tag, char* p_attr);
	   int getInteger(std::string& configFile, std::string& p_tag, std::string& p_attr);
	   int getIntegerFromString(std::string& configFile, char* p_tag, char* p_attr);
	   int getIntegerFromString(std::string& configFile, std::string& p_tag, std::string& p_attr);
	   float getFloatFromString(std::string& configFile, char* p_tag, char* p_attr);
	   float getFloatFromString(std::string& configFile, std::string& p_tag, std::string& p_attr);
	   std::string getString(std::string& configFile, char* p_tag, char* p_attr);
	   std::string getString(std::string& configFile, std::string& p_tag, std::string& p_attr)
		   throw(std::runtime_error);
	   std::string getStringFromString(std::string& p_String, char* p_tag, char* p_attr);
	   std::string getStringFromString(std::string& p_String, std::string& p_tag, std::string& p_attr);



};

}

#endif /* PARSER_H_ */
